/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ssp.utility;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;

/**
 * ログ出力を行うクラス
 * @author yamazaki
 */
public class LoggingManager {
    
    /**
     * ログ設定ファイル
     */
    protected static final String LOGGING_PROPERTIES = "javalog.properties";
    
    /**
     * Loggerオブジェクト
     */
    private static final Logger logger;
    
    /**
     * static initializerによるログ設定の初期化
     */
    static {
        //loggerの名前
        logger = Logger.getLogger("SampleLogging");
        
        final InputStream inStream = ClassLoader.getSystemResourceAsStream(LOGGING_PROPERTIES);
        
        try {
            LogManager.getLogManager().readConfiguration(inStream);
            logger.log(Level.INFO, "<" + new Throwable().getStackTrace()[0].getClassName() + new Throwable().getStackTrace()[0].getMethodName() + "> : Logging start...");
        } catch(IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(inStream != null) {
                    inStream.close();
                }
            } catch(IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * Throwableからクラス名とメソッド名を得る
     * @param t Throwable
     * @return クラス名とメソッド名を含んだログの前半部分
     */
    private static String getClassAndMethodName(Throwable t) {
        if(t == null) {
            return "<null> : ";
        }
        return "<" + t.getStackTrace()[0].getClassName() + "." + t.getStackTrace()[0].getMethodName() + "> : ";
    }
    
    /**
     * Levelとmessageを指定してログを取る
     * @param level ログレベル
     * @param message ログの内容
     * @param t Throwable
     */
    public static void logging(Level level, String message, Throwable t) {
        logger.log(level, getClassAndMethodName(t) + message);
    }
    
}
